home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / include / qwidget.h.z / qwidget.h
C/C++ Source or Header  |  2002-04-08  |  31KB  |  965 lines

  1. /****************************************************************************
  2. ** $Id:  qt/qwidget.h   3.0.3   edited Feb 11 02:58 $
  3. **
  4. ** Definition of QWidget class
  5. **
  6. ** Created : 931029
  7. **
  8. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  9. **
  10. ** This file is part of the kernel module of the Qt GUI Toolkit.
  11. **
  12. ** This file may be distributed under the terms of the Q Public License
  13. ** as defined by Trolltech AS of Norway and appearing in the file
  14. ** LICENSE.QPL included in the packaging of this file.
  15. **
  16. ** This file may be distributed and/or modified under the terms of the
  17. ** GNU General Public License version 2 as published by the Free Software
  18. ** Foundation and appearing in the file LICENSE.GPL included in the
  19. ** packaging of this file.
  20. **
  21. ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
  22. ** licenses may use this file in accordance with the Qt Commercial License
  23. ** Agreement provided with the Software.
  24. **
  25. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  26. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  27. **
  28. ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
  29. **   information about Qt Commercial License Agreements.
  30. ** See http://www.trolltech.com/qpl/ for QPL licensing information.
  31. ** See http://www.trolltech.com/gpl/ for GPL licensing information.
  32. **
  33. ** Contact info@trolltech.com if any conditions of this licensing are
  34. ** not clear to you.
  35. **
  36. **********************************************************************/
  37.  
  38. #ifndef QWIDGET_H
  39. #define QWIDGET_H
  40.  
  41. #ifndef QT_H
  42. #include "qwindowdefs.h"
  43. #include "qobject.h"
  44. #include "qpaintdevice.h"
  45. #include "qpalette.h"
  46. #include "qfont.h"
  47. #include "qfontmetrics.h"
  48. #include "qfontinfo.h"
  49. #include "qsizepolicy.h"
  50. #endif // QT_H
  51.  
  52. class QLayout;
  53. struct QWExtra;
  54. struct QTLWExtra;
  55. class QFocusData;
  56. class QCursor;
  57. class QWSRegionManager;
  58. class QStyle;
  59.  
  60. class Q_EXPORT QWidget : public QObject, public QPaintDevice
  61. {
  62.     Q_OBJECT
  63.     Q_ENUMS( BackgroundMode FocusPolicy BackgroundOrigin )
  64.     Q_PROPERTY( bool isTopLevel READ isTopLevel )
  65.     Q_PROPERTY( bool isDialog READ isDialog )
  66.     Q_PROPERTY( bool isModal READ isModal )
  67.     Q_PROPERTY( bool isPopup READ isPopup )
  68.     Q_PROPERTY( bool isDesktop READ isDesktop )
  69.     Q_PROPERTY( bool enabled READ isEnabled WRITE setEnabled )
  70.     Q_PROPERTY( QRect geometry READ geometry WRITE setGeometry )
  71.     Q_PROPERTY( QRect frameGeometry READ frameGeometry )
  72.     Q_PROPERTY( int x READ x )
  73.     Q_PROPERTY( int y READ y )
  74.     Q_PROPERTY( QPoint pos READ pos WRITE move DESIGNABLE false STORED false )
  75.     Q_PROPERTY( QSize frameSize READ frameSize )
  76.     Q_PROPERTY( QSize size READ size WRITE resize DESIGNABLE false STORED false )
  77.     Q_PROPERTY( int width READ width )
  78.     Q_PROPERTY( int height READ height )
  79.     Q_PROPERTY( QRect rect READ rect )
  80.     Q_PROPERTY( QRect childrenRect READ childrenRect )
  81.     Q_PROPERTY( QRegion childrenRegion READ childrenRegion )
  82.     Q_PROPERTY( QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy )
  83.     Q_PROPERTY( QSize minimumSize READ minimumSize WRITE setMinimumSize )
  84.     Q_PROPERTY( QSize maximumSize READ maximumSize WRITE setMaximumSize )
  85.     Q_PROPERTY( int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false )
  86.     Q_PROPERTY( int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false )
  87.     Q_PROPERTY( int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false )
  88.     Q_PROPERTY( int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false )
  89.     Q_PROPERTY( QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement )
  90.     Q_PROPERTY( QSize baseSize READ baseSize WRITE setBaseSize )
  91.     Q_PROPERTY( BackgroundMode backgroundMode READ backgroundMode WRITE setBackgroundMode DESIGNABLE false )
  92.     Q_PROPERTY( QColor paletteForegroundColor READ paletteForegroundColor WRITE setPaletteForegroundColor RESET unsetPalette )
  93.     Q_PROPERTY( QColor paletteBackgroundColor READ paletteBackgroundColor WRITE setPaletteBackgroundColor RESET unsetPalette )
  94.     Q_PROPERTY( QPixmap paletteBackgroundPixmap READ paletteBackgroundPixmap WRITE setPaletteBackgroundPixmap RESET unsetPalette )
  95.     Q_PROPERTY( QBrush backgroundBrush READ backgroundBrush )
  96.     Q_PROPERTY( QColorGroup colorGroup READ colorGroup )
  97.     Q_PROPERTY( QPalette palette READ palette WRITE setPalette RESET unsetPalette  STORED ownPalette )
  98.     Q_PROPERTY( BackgroundOrigin backgroundOrigin READ backgroundOrigin WRITE setBackgroundOrigin )
  99.     Q_PROPERTY( bool ownPalette READ ownPalette )
  100.     Q_PROPERTY( QFont font READ font WRITE setFont RESET unsetFont STORED ownFont )
  101.     Q_PROPERTY( bool ownFont READ ownFont )
  102. #ifndef QT_NO_CURSOR
  103.     Q_PROPERTY( QCursor cursor READ cursor WRITE setCursor RESET unsetCursor STORED ownCursor )
  104.     Q_PROPERTY( bool ownCursor READ ownCursor )
  105. #endif
  106. #ifndef QT_NO_WIDGET_TOPEXTRA
  107.     Q_PROPERTY( QString caption READ caption WRITE setCaption )
  108.     Q_PROPERTY( QPixmap icon READ icon WRITE setIcon )
  109.     Q_PROPERTY( QString iconText READ iconText WRITE setIconText )
  110. #endif
  111.     Q_PROPERTY( bool mouseTracking READ hasMouseTracking WRITE setMouseTracking )
  112.     Q_PROPERTY( bool underMouse READ hasMouse )
  113.     Q_PROPERTY( bool isActiveWindow READ isActiveWindow )
  114.     Q_PROPERTY( bool focusEnabled READ isFocusEnabled )
  115.     Q_PROPERTY( FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy )
  116.     Q_PROPERTY( bool focus READ hasFocus )
  117.     Q_PROPERTY( bool updatesEnabled READ isUpdatesEnabled WRITE setUpdatesEnabled DESIGNABLE false )
  118.     Q_PROPERTY( bool visible READ isVisible )
  119.     Q_PROPERTY( QRect visibleRect READ visibleRect )
  120.     Q_PROPERTY( bool hidden READ isHidden )
  121.     Q_PROPERTY( bool minimized READ isMinimized )
  122.     Q_PROPERTY( QSize sizeHint READ sizeHint )
  123.     Q_PROPERTY( QSize minimumSizeHint READ minimumSizeHint )
  124.     Q_PROPERTY( QRect microFocusHint READ microFocusHint )
  125.     Q_PROPERTY( bool acceptDrops READ acceptDrops WRITE setAcceptDrops )
  126.     Q_PROPERTY( bool autoMask READ autoMask WRITE setAutoMask DESIGNABLE false SCRIPTABLE false )
  127.     Q_PROPERTY( bool customWhatsThis READ customWhatsThis )
  128.  
  129. public:
  130.     QWidget( QWidget* parent=0, const char* name=0, WFlags f=0 );
  131.     ~QWidget();
  132.  
  133.     WId         winId() const;
  134.     void     setName( const char *name );
  135. #ifndef QT_NO_STYLE
  136.     // GUI style setting
  137.  
  138.     QStyle     &style() const;
  139.     void        setStyle( QStyle * );
  140.     QStyle*    setStyle( const QString& );
  141. #endif
  142.     // Widget types and states
  143.  
  144.     bool     isTopLevel()    const;
  145.     bool     isDialog()    const;
  146.     bool     isPopup()    const;
  147.     bool     isDesktop()    const;
  148.     bool     isModal()    const;
  149.  
  150.     bool     isEnabled()    const;
  151.     bool     isEnabledTo(QWidget*) const;
  152.     bool     isEnabledToTLW() const;
  153.  
  154. public slots:
  155.     virtual void setEnabled( bool );
  156.     void setDisabled( bool );
  157.  
  158.     // Widget coordinates
  159.  
  160. public:
  161.     QRect     frameGeometry() const;
  162.     const QRect &geometry()    const;
  163.     int         x()        const;
  164.     int         y()        const;
  165.     QPoint     pos()        const;
  166.     QSize     frameSize()    const;
  167.     QSize     size()        const;
  168.     int         width()    const;
  169.     int         height()    const;
  170.     QRect     rect()        const;
  171.     QRect     childrenRect() const;
  172.     QRegion     childrenRegion() const;
  173.  
  174.     QSize     minimumSize()     const;
  175.     QSize     maximumSize()     const;
  176.     int         minimumWidth()     const;
  177.     int         minimumHeight() const;
  178.     int         maximumWidth()     const;
  179.     int         maximumHeight() const;
  180.     void     setMinimumSize( const QSize & );
  181.     virtual void setMinimumSize( int minw, int minh );
  182.     void     setMaximumSize( const QSize & );
  183.     virtual void setMaximumSize( int maxw, int maxh );
  184.     void     setMinimumWidth( int minw );
  185.     void     setMinimumHeight( int minh );
  186.     void     setMaximumWidth( int maxw );
  187.     void     setMaximumHeight( int maxh );
  188.  
  189.     QSize     sizeIncrement() const;
  190.     void     setSizeIncrement( const QSize & );
  191.     virtual void setSizeIncrement( int w, int h );
  192.     QSize     baseSize() const;
  193.     void     setBaseSize( const QSize & );
  194.     void     setBaseSize( int basew, int baseh );
  195.  
  196.     void    setFixedSize( const QSize & );
  197.     void    setFixedSize( int w, int h );
  198.     void    setFixedWidth( int w );
  199.     void    setFixedHeight( int h );
  200.  
  201.     // Widget coordinate mapping
  202.  
  203.     QPoint     mapToGlobal( const QPoint & )     const;
  204.     QPoint     mapFromGlobal( const QPoint & ) const;
  205.     QPoint     mapToParent( const QPoint & )     const;
  206.     QPoint     mapFromParent( const QPoint & ) const;
  207.     QPoint     mapTo( QWidget *, const QPoint & ) const;
  208.     QPoint     mapFrom( QWidget *, const QPoint & ) const;
  209.  
  210.     QWidget    *topLevelWidget()   const;
  211.  
  212.     // Widget attribute functions
  213.  
  214.     BackgroundMode    backgroundMode() const;
  215.     virtual void    setBackgroundMode( BackgroundMode );
  216.     void         setBackgroundMode( BackgroundMode, BackgroundMode );
  217.  
  218.     const QColor &    foregroundColor() const;
  219.  
  220.     const QColor &    eraseColor() const;
  221.     virtual void    setEraseColor( const QColor & );
  222.  
  223.     const QPixmap *    erasePixmap() const;
  224.     virtual void    setErasePixmap( const QPixmap & );
  225.  
  226. #ifndef QT_NO_PALETTE
  227.     const QColorGroup & colorGroup() const;
  228.     const QPalette &    palette()    const;
  229.     bool        ownPalette() const;
  230.     virtual void    setPalette( const QPalette & );
  231.     void        unsetPalette();
  232. #endif
  233.  
  234.     const QColor &    paletteForegroundColor() const;
  235.     void        setPaletteForegroundColor( const QColor & );
  236.  
  237.     const QColor &    paletteBackgroundColor() const;
  238.     virtual void    setPaletteBackgroundColor( const QColor & );
  239.  
  240.     const QPixmap *    paletteBackgroundPixmap() const;
  241.     virtual void     setPaletteBackgroundPixmap( const QPixmap & );
  242.  
  243.     const QBrush&    backgroundBrush() const;
  244.  
  245.     QFont        font() const;
  246.     bool        ownFont() const;
  247.     virtual void    setFont( const QFont & );
  248.     void        unsetFont();
  249.     QFontMetrics    fontMetrics() const;
  250.     QFontInfo         fontInfo() const;
  251.  
  252. #ifndef QT_NO_CURSOR
  253.     const QCursor      &cursor() const;
  254.     bool        ownCursor() const;
  255.     virtual void    setCursor( const QCursor & );
  256.     virtual void    unsetCursor();
  257. #endif
  258. #ifndef QT_NO_WIDGET_TOPEXTRA
  259.     QString        caption() const;
  260.     const QPixmap      *icon() const;
  261.     QString        iconText() const;
  262. #endif
  263.     bool        hasMouseTracking() const;
  264.     bool        hasMouse() const;
  265.  
  266.     virtual void    setMask( const QBitmap & );
  267.     virtual void    setMask( const QRegion & );
  268.     void        clearMask();
  269.  
  270.     const QColor &    backgroundColor() const; // obsolete, use eraseColor()
  271.     virtual void    setBackgroundColor( const QColor & ); // obsolete, use setEraseColor()
  272.     const QPixmap *    backgroundPixmap() const; // obsolete, use erasePixmap()
  273.     virtual void    setBackgroundPixmap( const QPixmap & ); // obsolete, use setErasePixmap()
  274.  
  275. public slots:
  276. #ifndef QT_NO_WIDGET_TOPEXTRA
  277.     virtual void    setCaption( const QString &);
  278.     virtual void    setIcon( const QPixmap & );
  279.     virtual void    setIconText( const QString &);
  280. #endif
  281.     virtual void    setMouseTracking( bool enable );
  282.  
  283.     // Keyboard input focus functions
  284.  
  285.     virtual void    setFocus();
  286.     void        clearFocus();
  287.  
  288. public:
  289.     enum FocusPolicy {
  290.     NoFocus = 0,
  291.     TabFocus = 0x1,
  292.     ClickFocus = 0x2,
  293.     StrongFocus = 0x3,
  294.     WheelFocus = 0x7
  295.     };
  296.  
  297.     bool        isActiveWindow() const;
  298.     virtual void    setActiveWindow();
  299.     bool        isFocusEnabled() const;
  300.  
  301.     FocusPolicy        focusPolicy() const;
  302.     virtual void    setFocusPolicy( FocusPolicy );
  303.     bool        hasFocus() const;
  304.     static void        setTabOrder( QWidget *, QWidget * );
  305.     virtual void    setFocusProxy( QWidget * );
  306.     QWidget *        focusProxy() const;
  307.  
  308.     // Grab functions
  309.  
  310.     void        grabMouse();
  311. #ifndef QT_NO_CURSOR
  312.     void        grabMouse( const QCursor & );
  313. #endif
  314.     void        releaseMouse();
  315.     void        grabKeyboard();
  316.     void        releaseKeyboard();
  317.     static QWidget *    mouseGrabber();
  318.     static QWidget *    keyboardGrabber();
  319.  
  320.     // Update/refresh functions
  321.  
  322.     bool         isUpdatesEnabled() const;
  323.  
  324. #if 0 //def Q_WS_QWS
  325.     void        repaintUnclipped( const QRegion &, bool erase = TRUE );
  326. #endif
  327. public slots:
  328.     virtual void    setUpdatesEnabled( bool enable );
  329.     void        update();
  330.     void        update( int x, int y, int w, int h );
  331.     void        update( const QRect& );
  332.     void        repaint();
  333.     void        repaint( bool erase );
  334.     void        repaint( int x, int y, int w, int h, bool erase=TRUE );
  335.     void        repaint( const QRect &, bool erase = TRUE );
  336.     void        repaint( const QRegion &, bool erase = TRUE );
  337.  
  338.     // Widget management functions
  339.  
  340.     virtual void    show();
  341.     virtual void    hide();
  342. #ifndef QT_NO_COMPAT
  343.     void        iconify()    { showMinimized(); }
  344. #endif
  345.     virtual void    showMinimized();
  346.     virtual void    showMaximized();
  347.     void        showFullScreen(); // virtual 3.0
  348.     virtual void    showNormal();
  349.     virtual void    polish();
  350.     void         constPolish() const;
  351.     bool        close();
  352.  
  353.     void        raise();
  354.     void        lower();
  355.     void        stackUnder( QWidget* );
  356.     virtual void    move( int x, int y );
  357.     void        move( const QPoint & );
  358.     virtual void    resize( int w, int h );
  359.     void        resize( const QSize & );
  360.     virtual void    setGeometry( int x, int y, int w, int h );
  361.     virtual void    setGeometry( const QRect & );
  362.  
  363. public:
  364.     virtual bool    close( bool alsoDelete );
  365.     bool        isVisible()    const;
  366.     bool        isVisibleTo(QWidget*) const;
  367.     bool        isVisibleToTLW() const; // obsolete
  368.     QRect        visibleRect() const;
  369.     bool         isHidden() const;
  370.     bool        isMinimized() const;
  371.     bool        isMaximized() const;
  372.  
  373.     virtual QSize    sizeHint() const;
  374.     virtual QSize    minimumSizeHint() const;
  375.     virtual QSizePolicy    sizePolicy() const;
  376.     virtual void        setSizePolicy( QSizePolicy );
  377.     virtual int heightForWidth(int) const;
  378.  
  379.     virtual void      adjustSize();
  380. #ifndef QT_NO_LAYOUT
  381.     QLayout *        layout() const { return lay_out; }
  382. #endif
  383.     void        updateGeometry();
  384.     virtual void     reparent( QWidget *parent, WFlags, const QPoint &,
  385.                   bool showIt=FALSE );
  386.     void        reparent( QWidget *parent, const QPoint &,
  387.                   bool showIt=FALSE );
  388. #ifndef QT_NO_COMPAT
  389.     void        recreate( QWidget *parent, WFlags f, const QPoint & p,
  390.                   bool showIt=FALSE ) { reparent(parent,f,p,showIt); }
  391. #endif
  392.  
  393.     void        erase();
  394.     void        erase( int x, int y, int w, int h );
  395.     void        erase( const QRect & );
  396.     void        erase( const QRegion & );
  397.     void        scroll( int dx, int dy );
  398.     void        scroll( int dx, int dy, const QRect& );
  399.  
  400.     void        drawText( int x, int y, const QString &);
  401.     void        drawText( const QPoint &, const QString &);
  402.  
  403.     // Misc. functions
  404.  
  405.     QWidget *        focusWidget() const;
  406.     QRect               microFocusHint() const;
  407.  
  408.     // drag and drop
  409.  
  410.     bool        acceptDrops() const;
  411.     virtual void    setAcceptDrops( bool on );
  412.  
  413.     // transparency and pseudo transparency
  414.  
  415.     virtual void    setAutoMask(bool);
  416.     bool        autoMask() const;
  417.  
  418.     enum BackgroundOrigin { WidgetOrigin, ParentOrigin, WindowOrigin };
  419.  
  420.     virtual void setBackgroundOrigin( BackgroundOrigin );
  421.     BackgroundOrigin backgroundOrigin() const;
  422.  
  423.  
  424.     // whats this help
  425.     virtual bool customWhatsThis() const;
  426.  
  427.     QWidget *        parentWidget( bool sameWindow = FALSE ) const;
  428.     WState        testWState( WState s ) const;
  429.     WFlags        testWFlags( WFlags f ) const;
  430.     static QWidget *    find( WId );
  431.     static QWidgetMapper *wmapper();
  432.  
  433.     QWidget  *childAt( int x, int y, bool includeThis = FALSE ) const;
  434.     QWidget  *childAt( const QPoint &, bool includeThis = FALSE ) const;
  435.  
  436. #if defined(Q_WS_QWS)
  437.     virtual QGfx * graphicsContext(bool clip_children=TRUE) const;
  438. #endif
  439. #if defined(Q_WS_MAC)
  440.     QRegion clippedRegion(bool do_children=TRUE);
  441.     uint clippedSerial(bool do_children=TRUE);
  442. #ifndef QMAC_NO_QUARTZ
  443.     CGContextRef macCGContext(bool clipped=TRUE) const;
  444. #endif
  445.     bool macDropEnabled;
  446. #endif
  447.  
  448. protected:
  449.     // Event handlers
  450.     bool     event( QEvent * );
  451.     virtual void mousePressEvent( QMouseEvent * );
  452.     virtual void mouseReleaseEvent( QMouseEvent * );
  453.     virtual void mouseDoubleClickEvent( QMouseEvent * );
  454.     virtual void mouseMoveEvent( QMouseEvent * );
  455. #ifndef QT_NO_WHEELEVENT
  456.     virtual void wheelEvent( QWheelEvent * );
  457. #endif
  458.     virtual void keyPressEvent( QKeyEvent * );
  459.     virtual void keyReleaseEvent( QKeyEvent * );
  460.     virtual void focusInEvent( QFocusEvent * );
  461.     virtual void focusOutEvent( QFocusEvent * );
  462.     virtual void enterEvent( QEvent * );
  463.     virtual void leaveEvent( QEvent * );
  464.     virtual void paintEvent( QPaintEvent * );
  465.     virtual void moveEvent( QMoveEvent * );
  466.     virtual void resizeEvent( QResizeEvent * );
  467.     virtual void closeEvent( QCloseEvent * );
  468.     virtual void contextMenuEvent( QContextMenuEvent * );
  469.     virtual void imStartEvent( QIMEvent * );
  470.     virtual void imComposeEvent( QIMEvent * );
  471.     virtual void imEndEvent( QIMEvent * );
  472.     virtual void tabletEvent( QTabletEvent * );
  473.  
  474. #ifndef QT_NO_DRAGANDDROP
  475.     virtual void dragEnterEvent( QDragEnterEvent * );
  476.     virtual void dragMoveEvent( QDragMoveEvent * );
  477.     virtual void dragLeaveEvent( QDragLeaveEvent * );
  478.     virtual void dropEvent( QDropEvent * );
  479. #endif
  480.  
  481.     virtual void showEvent( QShowEvent * );
  482.     virtual void hideEvent( QHideEvent * );
  483.  
  484. #if defined(Q_WS_MAC)
  485.     virtual bool macEvent( MSG * );
  486. #endif
  487. #if defined(Q_WS_WIN)
  488.     virtual bool winEvent( MSG * );
  489. #endif
  490. #if defined(Q_WS_X11)
  491.     virtual bool x11Event( XEvent * );
  492. #endif
  493. #if defined(Q_WS_QWS)
  494.     virtual bool qwsEvent( QWSEvent * );
  495.     virtual unsigned char *scanLine( int ) const;
  496.     virtual int bytesPerLine() const;
  497. #endif
  498.  
  499.     virtual void updateMask();
  500.  
  501.     // Misc. protected functions
  502.  
  503. #ifndef QT_NO_STYLE
  504.     virtual void styleChange( QStyle& );
  505. #endif
  506.     virtual void enabledChange( bool oldEnabled );
  507. #ifndef QT_NO_PALETTE
  508.     virtual void paletteChange( const QPalette & );
  509. #endif
  510.     virtual void fontChange( const QFont & );
  511.     virtual void windowActivationChange( bool oldActive );
  512.  
  513.     int         metric( int )    const;
  514.  
  515.     void     resetInputContext();
  516.  
  517.     virtual void create( WId = 0, bool initializeWindow = TRUE,
  518.              bool destroyOldWindow = TRUE );
  519.     virtual void destroy( bool destroyWindow = TRUE,
  520.               bool destroySubWindows = TRUE );
  521.     uint     getWState() const;
  522.     virtual void setWState( uint );
  523.     void     clearWState( uint n );
  524.     WFlags     getWFlags() const;
  525.     virtual void setWFlags( WFlags );
  526.     void     clearWFlags( WFlags n );
  527.  
  528.     virtual bool focusNextPrevChild( bool next );
  529.  
  530.     QWExtra    *extraData();
  531.     QTLWExtra    *topData();
  532.     QFocusData    *focusData();
  533.  
  534.     virtual void setKeyCompression(bool);
  535.     virtual void setMicroFocusHint(int x, int y, int w, int h, bool text=TRUE, QFont *f = 0);
  536.  
  537. #if defined(Q_WS_MAC)
  538.     void dirtyClippedRegion(bool);
  539.     bool isClippedRegionDirty();
  540. #endif
  541.  
  542. private slots:
  543.     void     focusProxyDestroyed();
  544.  
  545. private:
  546.     void     setFontSys( QFont *f = 0 );
  547. #if defined(Q_WS_X11)
  548.     void     createInputContext();
  549.     void     destroyInputContext();
  550.     void     focusInputContext();
  551.     void     checkChildrenDnd();
  552. #elif defined(Q_WS_MAC)
  553.     uint    own_id : 1; //owns the winid
  554.     EventHandlerRef window_event;
  555.     //mac event functions
  556.     void propagateUpdates();
  557.     //friends, way too many - fix this immediatly!
  558.     friend void qt_clean_root_win();
  559.     friend bool qt_recreate_root_win();
  560.     friend QPoint posInWindow(QWidget *);
  561.     friend QWidget *qt_recursive_match(QWidget *widg, int x, int y);
  562.     friend void qt_paint_children(QWidget *,QRegion &, uchar ops);
  563.     friend void qt_event_request_updates(QWidget *, QRegion &);
  564.     friend bool qt_window_rgn(WId, short, RgnHandle, bool);
  565.     friend class QDragManager;
  566. #endif
  567.  
  568. #ifndef QT_NO_LAYOUT
  569.     void      setLayout( QLayout *l );
  570. #endif
  571.     void     setWinId( WId );
  572.     void     showWindow();
  573.     void     hideWindow();
  574.     void     sendShowEventsToChildren( bool spontaneous );
  575.     void     sendHideEventsToChildren( bool spontaneous );
  576.     void     reparentSys( QWidget *parent, WFlags, const QPoint &,  bool showIt);
  577.     void     createTLExtra();
  578.     void     createExtra();
  579.     void     deleteExtra();
  580.     void     createSysExtra();
  581.     void     deleteSysExtra();
  582.     void     createTLSysExtra();
  583.     void     deleteTLSysExtra();
  584.     void     deactivateWidgetCleanup();
  585.     void     internalSetGeometry( int, int, int, int, bool );
  586.     void     reparentFocusWidgets( QWidget * );
  587.     QFocusData    *focusData( bool create );
  588.     void         setBackgroundFromMode();
  589.     void         setBackgroundColorDirect( const QColor & );
  590.     void        setBackgroundPixmapDirect( const QPixmap & );
  591.     void         setBackgroundModeDirect( BackgroundMode );
  592.     void         setBackgroundEmpty();
  593.     void     updateFrameStrut() const;
  594. #if defined(Q_WS_X11)
  595.     void         setBackgroundX11Relative();
  596. #endif
  597.  
  598.     WId         winid;
  599.     uint     widget_state;
  600.     uint     widget_flags;
  601.     uint     focus_policy : 4;
  602.     uint      own_font :1;
  603.     uint      own_palette :1;
  604.     uint      sizehint_forced :1;
  605.     uint      is_closing :1;
  606.     uint      in_show : 1;
  607.     uint      in_show_maximized : 1;
  608.     uint     fstrut_dirty : 1;
  609.     QRect     crect;
  610.     QColor     bg_col;
  611. #ifndef QT_NO_PALETTE
  612.     QPalette     pal;
  613. #endif
  614.     QFont     fnt;
  615. #ifndef QT_NO_LAYOUT
  616.     QLayout     *lay_out;
  617. #endif
  618.     QWExtra    *extra;
  619. #if defined(Q_WS_QWS)
  620.     QRegion     req_region;            // Requested region
  621.     mutable QRegion     paintable_region;    // Paintable region
  622.     mutable bool         paintable_region_dirty;// needs to be recalculated
  623.     mutable QRegion      alloc_region;          // Allocated region
  624.     mutable bool         alloc_region_dirty;    // needs to be recalculated
  625.     mutable int          overlapping_children;  // Handle overlapping children
  626.  
  627.     int         alloc_region_index;
  628.     int         alloc_region_revision;
  629.  
  630.     void updateOverlappingChildren() const;
  631.     void setChildrenAllocatedDirty();
  632.     bool isAllocatedRegionDirty() const;
  633.     QRegion requestedRegion() const;
  634.     QRegion allocatedRegion() const;
  635.     QRegion paintableRegion() const;
  636.  
  637.     // used to accumulate dirty region when children moved/resized.
  638.     QRegion dirtyChildren;
  639.     bool isSettingGeometry;
  640.     friend class QWSManager;
  641. #endif
  642.  
  643.     static void     createMapper();
  644.     static void     destroyMapper();
  645.     static QWidgetList     *wList();
  646.     static QWidgetList     *tlwList();
  647.     static QWidgetMapper *mapper;
  648.     friend class QApplication;
  649.     friend class QBaseApplication;
  650.     friend class QPainter;
  651.     friend class QFontMetrics;
  652.     friend class QFontInfo;
  653.     friend class QETWidget;
  654.     friend class QLayout;
  655.  
  656. private:    // Disabled copy constructor and operator=
  657. #if defined(Q_DISABLE_COPY)
  658.     QWidget( const QWidget & );
  659.     QWidget &operator=( const QWidget & );
  660. #endif
  661.  
  662. public: // obsolete functions to dissappear or to become inline in 3.0
  663. #ifndef QT_NO_PALETTE
  664.     void setPalette( const QPalette &p, bool ) { setPalette( p ); }
  665. #endif
  666.     void setFont( const QFont &f, bool ) { setFont( f ); }
  667. };
  668.  
  669.  
  670. inline Qt::WState QWidget::testWState( WState s ) const
  671. { return (widget_state & s); }
  672.  
  673. inline Qt::WFlags QWidget::testWFlags( WFlags f ) const
  674. { return (widget_flags & f); }
  675.  
  676.  
  677. inline WId QWidget::winId() const
  678. { return winid; }
  679.  
  680. inline bool QWidget::isTopLevel() const
  681. { return testWFlags(WType_TopLevel); }
  682.  
  683. inline bool QWidget::isDialog() const
  684. { return testWFlags(WType_Dialog); }
  685.  
  686. inline bool QWidget::isPopup() const
  687. { return testWFlags(WType_Popup); }
  688.  
  689. inline bool QWidget::isDesktop() const
  690. { return testWFlags(WType_Desktop); }
  691.  
  692. inline bool QWidget::isEnabled() const
  693. { return !testWState(WState_Disabled); }
  694.  
  695. inline bool QWidget::isModal() const
  696. { return testWFlags(WShowModal); }
  697.  
  698. inline bool QWidget::isEnabledToTLW() const
  699. { return isEnabled(); }
  700.  
  701. inline const QRect &QWidget::geometry() const
  702. { return crect; }
  703.  
  704. inline QSize QWidget::size() const
  705. { return crect.size(); }
  706.  
  707. inline int QWidget::width() const
  708. { return crect.width(); }
  709.  
  710. inline int QWidget::height() const
  711. { return crect.height(); }
  712.  
  713. inline QRect QWidget::rect() const
  714. { return QRect(0,0,crect.width(),crect.height()); }
  715.  
  716. inline int QWidget::minimumWidth() const
  717. { return minimumSize().width(); }
  718.  
  719. inline int QWidget::minimumHeight() const
  720. { return minimumSize().height(); }
  721.  
  722. inline int QWidget::maximumWidth() const
  723. { return maximumSize().width(); }
  724.  
  725. inline int QWidget::maximumHeight() const
  726. { return maximumSize().height(); }
  727.  
  728. inline void QWidget::setMinimumSize( const QSize &s )
  729. { setMinimumSize(s.width(),s.height()); }
  730.  
  731. inline void QWidget::setMaximumSize( const QSize &s )
  732. { setMaximumSize(s.width(),s.height()); }
  733.  
  734. inline void QWidget::setSizeIncrement( const QSize &s )
  735. { setSizeIncrement(s.width(),s.height()); }
  736.  
  737. inline void QWidget::setBaseSize( const QSize &s )
  738. { setBaseSize(s.width(),s.height()); }
  739.  
  740. inline const QColor &QWidget::eraseColor() const
  741. { return bg_col; }
  742.  
  743. #ifndef QT_NO_PALETTE
  744. inline const QPalette &QWidget::palette() const
  745. { return pal; }
  746. #endif
  747.  
  748. inline QFont QWidget::font() const
  749. { return fnt; }
  750.  
  751. inline QFontMetrics QWidget::fontMetrics() const
  752. { return QFontMetrics(font()); }
  753.  
  754. inline QFontInfo QWidget::fontInfo() const
  755. { return QFontInfo(font()); }
  756.  
  757. inline bool QWidget::hasMouseTracking() const
  758. { return testWState(WState_MouseTracking); }
  759.  
  760. inline bool QWidget::hasMouse() const
  761. { return testWState(WState_HasMouse); }
  762.  
  763. inline bool  QWidget::isFocusEnabled() const
  764. { return (FocusPolicy)focus_policy != NoFocus; }
  765.  
  766. inline QWidget::FocusPolicy QWidget::focusPolicy() const
  767. { return (FocusPolicy)focus_policy; }
  768.  
  769. inline bool QWidget::isUpdatesEnabled() const
  770. { return !testWState(WState_BlockUpdates); }
  771.  
  772. inline void QWidget::update( const QRect &r )
  773. { update( r.x(), r.y(), r.width(), r.height() ); }
  774.  
  775. inline void QWidget::repaint()
  776. { repaint( 0, 0, crect.width(), crect.height(), TRUE ); }
  777.  
  778. inline void QWidget::repaint( bool erase )
  779. { repaint( 0, 0, crect.width(), crect.height(), erase ); }
  780.  
  781. inline void QWidget::repaint( const QRect &r, bool erase )
  782. { repaint( r.x(), r.y(), r.width(), r.height(), erase ); }
  783.  
  784. inline void QWidget::erase()
  785. { erase( 0, 0, crect.width(), crect.height() ); }
  786.  
  787. inline void QWidget::erase( const QRect &r )
  788. { erase( r.x(), r.y(), r.width(), r.height() ); }
  789.  
  790. inline bool QWidget::close()
  791. { return close( FALSE ); }
  792.  
  793. inline bool QWidget::isVisible() const
  794. { return testWState(WState_Visible); }
  795.  
  796. inline bool QWidget::isVisibleToTLW() const // obsolete
  797. { return isVisible(); }
  798.  
  799. inline bool QWidget::isHidden() const
  800. { return testWState(WState_ForceHide); }
  801.  
  802. inline void QWidget::move( const QPoint &p )
  803. { move( p.x(), p.y() ); }
  804.  
  805. inline void QWidget::resize( const QSize &s )
  806. { resize( s.width(), s.height()); }
  807.  
  808. inline void QWidget::setGeometry( const QRect &r )
  809. { setGeometry( r.left(), r.top(), r.width(), r.height() ); }
  810.  
  811. inline void QWidget::drawText( const QPoint &p, const QString &s )
  812. { drawText( p.x(), p.y(), s ); }
  813.  
  814. inline QWidget *QWidget::parentWidget( bool sameWindow ) const
  815. {
  816.     if ( sameWindow )
  817.     return isTopLevel() ? 0 : (QWidget *)QObject::parent();
  818.     return (QWidget *)QObject::parent();
  819. }
  820.  
  821. inline QWidgetMapper *QWidget::wmapper()
  822. { return mapper; }
  823.  
  824. inline uint QWidget::getWState() const
  825. { return widget_state; }
  826.  
  827. inline void QWidget::setWState( uint f )
  828. { widget_state |= f; }
  829.  
  830. inline void QWidget::clearWState( uint f )
  831. { widget_state &= ~f; }
  832.  
  833. inline Qt::WFlags QWidget::getWFlags() const
  834. { return widget_flags; }
  835.  
  836. inline void QWidget::setWFlags( WFlags f )
  837. { widget_flags |= f; }
  838.  
  839. inline void QWidget::clearWFlags( WFlags f )
  840. { widget_flags &= ~f; }
  841.  
  842. inline void QWidget::constPolish() const
  843. {
  844.     if ( !testWState(WState_Polished) ) {
  845.     QWidget* that = (QWidget*) this;
  846.     that->polish();
  847.         that->setWState(WState_Polished); // be on the safe side...
  848.     }
  849. }
  850. #ifndef QT_NO_CURSOR
  851. inline bool QWidget::ownCursor() const
  852. {
  853.     return testWState( WState_OwnCursor );
  854. }
  855. #endif
  856. inline bool QWidget::ownFont() const
  857. {
  858.     return own_font;
  859. }
  860. #ifndef QT_NO_PALETTE
  861. inline bool QWidget::ownPalette() const
  862. {
  863.     return own_palette;
  864. }
  865. #endif
  866.  
  867. // Extra QWidget data
  868. //  - to minimize memory usage for members that are seldom used.
  869. //  - top-level widgets have extra extra data to reduce cost further
  870.  
  871. class QFocusData;
  872. class QWSManager;
  873. #if defined(Q_WS_WIN)
  874. class QOleDropTarget;
  875. #endif
  876. #if defined(Q_WS_MAC)
  877. class QMacDndExtra;
  878. #endif
  879.  
  880. struct Q_EXPORT QTLWExtra {
  881. #ifndef QT_NO_WIDGET_TOPEXTRA
  882.     QString  caption;                // widget caption
  883.     QString  iconText;                // widget icon text
  884.     QPixmap *icon;                // widget icon
  885. #endif
  886.     QFocusData *focusData;            // focus data (for TLW)
  887.     short    incw, inch;            // size increments
  888.     // frame strut
  889.     ulong    fleft, fright, ftop, fbottom;
  890.     uint     iconic: 1;                // iconified [cur. win32 only]
  891.     uint     fullscreen : 1;            // full-screen mode
  892.     uint     showMode: 2;            // 0 normal, 1 minimized, 2 maximized, 3 reset
  893.     short    basew, baseh;            // base sizes
  894. #if defined(Q_WS_X11)
  895.     WId  parentWinId;            // parent window Id (valid after reparenting)
  896.     uint     embedded : 1;            // window is embedded in another Qt application
  897.     uint     reserved: 2;            // reserved
  898.     uint     dnd : 1;                 // DND properties installed
  899.     uint     uspos : 1;                         // User defined position
  900.     uint     ussize : 1;                        // User defined size
  901.     void    *xic;                // XIM Input Context
  902. #endif
  903. #if defined(Q_WS_MAC)
  904.     WindowGroupRef group;
  905. #endif
  906. #if defined(Q_WS_QWS) && !defined ( QT_NO_QWS_MANAGER )
  907.     QRegion decor_allocated_region;        // decoration allocated region
  908.     QWSManager *qwsManager;
  909. #endif
  910. #if defined(Q_WS_WIN)
  911.     HICON    winIcon;                // internal Windows icon
  912. #endif
  913.     QRect    normalGeometry;            // used by showMin/maximized/FullScreen
  914. };
  915.  
  916.  
  917. #define QWIDGETSIZE_MAX 32767
  918.  
  919. // dear user: you can see this struct, but it is internal. do not touch.
  920.  
  921. struct Q_EXPORT QWExtra {
  922.     Q_INT16  minw, minh;            // minimum size
  923.     Q_INT16  maxw, maxh;            // maximum size
  924.     QPixmap *bg_pix;                // background pixmap
  925.     QWidget *focus_proxy;
  926. #ifndef QT_NO_CURSOR
  927.     QCursor *curs;
  928. #endif
  929.     QTLWExtra *topextra;            // only useful for TLWs
  930. #if defined(Q_WS_WIN)
  931.     QOleDropTarget *dropTarget;            // drop target
  932. #endif
  933. #if defined(Q_WS_X11)
  934.     WId xDndProxy;            // XDND forwarding to embedded windows
  935. #endif
  936. #if defined(Q_WS_MAC)
  937.     QRegion clip_saved, clip_sibs, clip_children;
  938.     QMacDndExtra *macDndExtra;
  939.     QRegion dirty_area;
  940.     uint clip_dirty : 1, clip_serial : 15;
  941.     uint child_dirty : 1, child_serial : 15;
  942. #ifndef QMAC_NO_QUARTZ
  943.     uint ctx_children_clipped:1;
  944. #endif
  945.     uint has_dirty_area:1;
  946. #endif
  947.     uint bg_origin : 2;
  948. #if defined(Q_WS_X11)
  949.     uint children_use_dnd : 1;
  950. #endif
  951. #if defined(Q_WS_QWS) || defined(Q_WS_MAC)
  952.     QRegion mask;                // widget mask
  953. #endif
  954.     char     bg_mode;                // background mode
  955.     char     bg_mode_visual;                // visual background mode
  956. #ifndef QT_NO_STYLE
  957.     QStyle* style;
  958. #endif
  959.     QRect micro_focus_hint;                     // micro focus hint
  960.     QSizePolicy size_policy;
  961. };
  962.  
  963.  
  964. #endif // QWIDGET_H
  965.